<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
	// `ES6`新增了`let`关键字，用来声明变量。它的用法类似于`var`，但是所声明的变量，
    // 只在`let`命令所在的代码块内有效，也就是增加了块级作用域。
    // - 使用块级作用域（let定义的变量属于块级作用域） 防止全局变量污染
    // let  a = 1;
	// {
	// 	let a = 2;
    // }
	// console.log(a);
	// - 块级作用域可以任意嵌套
    //
    //
	// - 就很合适使用let命令
    //
	// - 变量i是let声明的，当前的i只在本轮循环有效，所以每一次循环的i其实都是一个新的变量
    //
	// > 你可能会问，如果每一轮循环的变量i都是重新声明的，那它怎么知道上一轮循环的值，从而计算出本轮循环的值？这是因为 JavaScript 引擎内部会记住上一轮循环的值，初始化本轮的变量i时，就在上一轮循环的基础上进行计算

	{

		var a = [];
		for (let i = 0; i < 10; i++) {
			a[i] = function () {
				console.log(i);
			};
		}
		a[5]();//
    }


</script>
</html>